#pragma once
#include<iostream>
#include<vector>
using namespace std;
class IRenderer;
class IInput;
class Game;
class ICamera;

typedef void (Game::*RenderFuncType)(void) const; 

class IEngine
{
	vector<RenderFuncType> mRenderFuncList;
public:
	static public  IEngine *pEngine;

	// now keeping all public 
	// later while revist need to make protected or private	
	Game *pGame;

	IRenderer *pRenderer;
	IInput *pInput;
	ICamera *pCamera;

	virtual void Init();
	virtual void Update();

	virtual void Shutdown();

	void AddedToRenderFuncList(RenderFuncType value , int piority = 0);

	IEngine();
	virtual ~IEngine();
};

//
